package com.hlkj.warboot.configurer.util;

import com.alibaba.fastjson.JSONObject;
import org.springframework.lang.Nullable;
import org.springframework.web.client.RestTemplate;

import java.text.MessageFormat;

/**
 * @Description: TODO http请求工具类
 * @Author: 李星 lixing_java@163.com
 * @Date: 2020/1/11 15:34
 */
public class HttpClientUtil {
    /*
     * @Description get请求
     * @Author 李星
     * @Date 2020/1/11 19:11
     * @Param [restTemplate 模板对象, url 请求地址, param 请求参数]
     * @return com.alibaba.fastjson.JSONObject
     *
     * TODO 有参调用方式：
     *      String url = "http://127.0.0.1:8080/warboot/test/get?name={name}&age={age}";
     *      JSONObject param = new JSONObject();
     *      param.put("name","张三");
     *      param.put("age","30");
     *      RestTemplateUtil.get(restTemplate, url, param);
     *      //
     *      RestTemplateUtil.get(restTemplate, "http://127.0.0.1:8080/warboot/test/get?name=张三&age=30", null);
     *
     * TODO 无参调用方式：
     *      String url = "http://127.0.0.1:8080/warboot/test/get";
     *      RestTemplateUtil.get(restTemplate, url, null);
     */
    public static JSONObject get(RestTemplate restTemplate, String url, @Nullable Object param) {
        JSONObject responseBody;
        if (param == null) {
            responseBody = restTemplate.getForObject(url, JSONObject.class);
        } else {
            responseBody = restTemplate.getForObject(url, JSONObject.class, param);
        }
        LoggerUtil.info(MessageFormat.format("RestTemplate--get--{0}", url));
//        LoggerUtil.info(MessageFormat.format("入参：{0}", JSONObject.toJSONString(param)));
//        LoggerUtil.info(MessageFormat.format("出参：{0}", JSONObject.toJSONString(responseBody)));
        LoggerUtil.info("");
        return responseBody;
    }

    /*
     * @Description post请求
     * @Author 李星
     * @Date 2020/1/11 15:55
     * @Param [restTemplate, url, param] 
     * @return java.lang.Object
     *
     * TODO 有参调用方式：
     *      String url = "http://127.0.0.1:8080/warboot/test/post";
     *      LinkedMultiValueMap<String, Object> param = new LinkedMultiValueMap<String, Object>();
     *      param.add("name","张三");
     *      RestTemplateUtil.post(restTemplate, url, param);
     *
     * TODO 无参调用方式：
     *      String url = "http://127.0.0.1:8080/warboot/test/post";
     *      RestTemplateUtil.post(restTemplate, url, null);
     */
    public static JSONObject post(RestTemplate restTemplate, String url, @Nullable Object param) {
        LoggerUtil.info(MessageFormat.format("RestTemplate--post--{0}", url));
//        LoggerUtil.info(MessageFormat.format("入参：{0}", JSONObject.toJSONString(param)));
        JSONObject responseBody = restTemplate.postForObject(url, param, JSONObject.class);
//        LoggerUtil.info(MessageFormat.format("出参：{0}", JSONObject.toJSONString(responseBody)));
        LoggerUtil.info("");
        return responseBody;
    }

}
